from PyPDF2 import PdfReader

def read_passwords_from_file(password_file):
    """
    从文本文件中读取密码列表。

    参数:
    password_file (str): 包含密码的文本文件的路径。
    """
    with open(password_file, 'r') as file:
        passwords = [line.strip() for line in file.readlines()]
    return passwords

def decrypt_pdf_with_passwords(input_file, passwords):
    """
    使用密码字典尝试解密PDF文件。

    参数:
    input_file (str): 要解密的PDF文件的路径。
    passwords (list): 包含密码的列表。
    """
    reader = PdfReader(input_file)
    if not reader.is_encrypted:
        print("文件未加密，无需解密。")
        return None

    for password in passwords:
        try:
            # 尝试使用当前密码解密
            if reader.decrypt(password):
                # 如果decrypt返回True，说明密码正确
                print(f"正确的密码是：{password}")
                return password
            else:
                # 如果decrypt返回False，说明密码错误
                print(f"\r尝试密码 {password} 失败，密码错误。", end='', flush=True)
        except Exception as e:
            # 如果解密失败，打印错误信息并尝试下一个密码
            print(f"尝试密码 {password} 失败，错误信息：{e}")

    print("所有密码尝试完毕，没有找到正确的密码。")
    return None

# 使用示例
if __name__ == "__main__":
    input_pdf = "example.pdf"  # 这里替换为你的加密PDF文件路径
    password_file = "passwords.txt"  # 替换为你的密码文件路径

    passwords = read_passwords_from_file(password_file)
    correct_password = decrypt_pdf_with_passwords(input_pdf, passwords)
    if correct_password:
        print(f"文件已成功解密，正确密码是：{correct_password}")
    else:
        print("没有找到正确的密码。")